/**
 * 单态定义:
 *    Ensure a class has only one instance, and provide a global point of access to it
 *    （确保每个类只有一个实例，并提供它的全局访问点）
 *    Singleton模式主要作用是保证在Java应用程序中，一个类Class只有一个实例存在。
 *    
 * 应用环境：
 *    比如软件的全局配置信息，或是一个Factory，或是一个主控类，建立目录，数据库连接都需要这样的单线程操作
 * @author MIAO
 * Created on 2011-10-16
 * For more information, please visit:ismiao.com
 */
package com.ismiao.designPattern.Singleton;

public class SingletonDesc {
/**
 * 饿汉模式实现的方法对于多线程应用程序，这种方法证明具有潜在危险的副作用。
 * 如果两个线程同时进入控制块，则可能会创建该成员变量的两个实例。
 * 要解决这一问题，您可能想只将重要部分放在控制块周围以确保线程安全。
 * 如果您这样做，则将对实例方法的所有调用进行序列化处理，并且可能会对性能产生不利影响（取决于应用程序）。
 * 正是由于这个原因，创建了此模式的另一个版本，它使用某种称为双重检验机制的功能。
 * 
 * 
 * 懒汉模式即lazy initialization，也就是说第一次调用时初始Singleton，以后就不用再生成了。
 * 注意到lazy initialization形式中的synchronized，这个synchronized很重要，
 * 如果没有synchronized，那么使用getInstance()是有可能得到多个Singleton实例。
 * 关于lazy initialization的Singleton有很多涉及double-checked locking (DCL)的讨论。
 * 
 * 如果你的应用基于容器，那么Singleton模式少用或者不用，可以使用相关替代技术
 */
}
